Delegates declareren
Wanneer je een klasse in C # wilt gebruiken, doet je dat in twee stappen:
- klasse definiëren, d.w.z. je definiëert de velden, eigenschappen en methoden;
- een exemplaar, object of instantie van de klasse maken;
Delegates volgen hetzelfde proces:
- Eerst declareer je de delegates die je wilt gebruiken. Dat houdt in dat je de compiler vertelt wat voor soort methode een delegate van dat type zal vertegenwoordigen.
- Dan moet je op een of meer exemplaren van die delegate creëren. Achter de schermen, creëert de compiler een klasse die de delegate vertegenwoordigt.
De syntaxis voor het declareren van een delegate is als volgt:
delegate void IntVertegenwoordiger(int x);
Hiermee declareer je een delegate met de naam IntVertegenwoordiger
, en geef je aan dat elk exemplaar van deze delegate een verwijzing kan bevatten naar een methode die een int
parameter aanneemt en void
retourneert. Delegates zijn dus type-safe. In de declaratie van de delegate geef je de details op over de signatuur en het retourtype van de methode die de delegate vertegenwoordigt.
Om een delegate te definiëren met de naam LongVertegenwoordiger, die een methode vertegenwoordigt die twee long
parameters aanneemt en een double
retourneert:
delegate double LongVertegenwoordiger(long x, long y);
Om een delegate te definiëren die een string retourneert, zonder parameters:
delegate string StringVertegenwoordiger();
Om een delegate te definiëren die een Tekstbestand retourneert en een string FileName parameter aanneemt:
delegate Dal.Tekstbestand TekstbestandVertegenwoordiger(string fileName);
De syntax gelijkt op de syntax van een definitie van een methode. Maar dan zonder methodeblok en de definitie is prefixed met het trefwoord delegate. Het komt neer op het definiëren van een nieuwe klasse. Je kan dus een delegate overal definiëren waar je een klasse kan definiëren. M.a.w. zowel binnen een andere klasse, buiten een klasse, of in een namespace als een top-level object. Het bereik van een delegate, kan net zoals van een klasse, public, private, protected, enz zijn.
Een delegate definiëren komt op hetzelfde neer als een klasse definiëren. Delegates zijn klassen die afgeleid worden van de klasse System.MulticastDelegate
, Die is afgeleid van de basisklasse System.Delegate
. De C # compiler is zich bewust van deze klasse en gebruikt de delegate syntax om de details te verbergen
van hoe die klasse werkt.